home *** CD-ROM | disk | FTP | other *** search
- * hol.s Horizontal OverLap
- * 水平方向のオーバーラップ / 最高速 = 3
- * by Mitsuky
-
-
- SPEED_MAX equ 3
-
- .offset 8 * 引き数
- _source_ptr: .ds.l 1
- _dest_ptr: .ds.l 1
- _speed: .ds.l 1
- _vdisp: .ds.l 1
-
-
-
- .text
- .even
-
- .dc.b 'WL10',$0d,$0a
- .dc.b '水平方向のオーバーラップ / 最高速 = 3',$0d,$0a
- .dc.b ' by Mitsuky',$0d,$0a
- .dc.b $1a
- .even
-
- hol:
- link a6,#0
- movem.l d1-d7/a0-a4,-(sp)
-
- move.l _speed(a6),d0 * d0.w =
- bmi main_ask_speed
- cmpi.l #SPEED_MAX,d0
- bhi main_err
-
- tst.l _vdisp(a6)
- bmi main_ask_vdisp
-
-
- movea.l _source_ptr(a6),a1 * a1.l = 転送元アドレス・その1
- movea.l _dest_ptr(a6),a2 * a2.l = 転送先アドレス・その1
-
- lea.l jump_table(pc),a0
- add.w d0,d0
- move.w (a0,d0.w),d0
- jmp (a0,d0.w)
-
- main_rts:
- moveq.l #0,d0
- main_rts_2:
- movem.l (sp)+,d1-d7/a0-a4
- unlk a6
- rts
-
-
- **** ****
- main_err:
- moveq.l #-1,d0
- bra main_rts_2
-
-
- **** ****
- main_ask_speed:
- moveq.l #SPEED_MAX,d0
- bra main_rts_2
-
-
- **** ****
- main_ask_vdisp:
- move.l _speed(a6),d0
- lea.l ask_vdisp_table(pc),a0
- add.w d0,d0
- move.w (a0,d0.w),d0
- bra main_rts_2
-
- ask_vdisp_table:
- .dc.w 512,512/2,512/4,512/8
-
-
- **** ****
- vdisp:
- movem.l a0,-(sp)
- move.l _vdisp(a6),a0
- jsr (a0)
- movem.l (sp)+,a0
- rts
-
-
- **** ****
- jump_table:
- .dc.w s0-jump_table
- .dc.w s1-jump_table
- .dc.w s2-jump_table
- .dc.w s3-jump_table
-
-
- *********************************************************
- s0: * 速度0の時
- lea.l 512*2(a1),a3 * a3.l = 転送元アドレス・その2
- lea.l 512*2(a2),a4 * a4.l = 転送先アドレス・その2
- lea.l (512-1)*2(a1),a1 * a1.l = 転送元アドレス・その1
- lea.l (512-1)*2(a2),a2 * a2.l = 転送先アドレス・その1
- move.l #1024*512+1*2,d4
- move.l #1024*512-1*2,d5
-
- move.w #512-1,d7
- s0_loop_x:
- bsr vdisp
-
- move.w #512/2-1,d6
- s0_loop_y:
- move.w (a1),(a2)
- move.w (a3),(a4)
- lea.l 2048(a1),a1
- lea.l 2048(a2),a2
- lea.l 2048(a3),a3
- lea.l 2048(a4),a4
- dbra d6,s0_loop_y
-
- suba.l d4,a1
- suba.l d4,a2
- suba.l d5,a3
- suba.l d5,a4
- dbra d7,s0_loop_x
-
- bra main_rts
-
- **** ****
- s1: * 速度1の時
- lea.l 512*2(a1),a3 * a3.l = 転送元アドレス・その2
- lea.l 512*2(a2),a4 * a4.l = 転送先アドレス・その2
- lea.l (512-2)*2(a1),a1 * a1.l = 転送元アドレス・その1
- lea.l (512-2)*2(a2),a2 * a2.l = 転送先アドレス・その1
- move.l #1024*512+2*2,d4
- move.l #1024*512-2*2,d5
-
- move.w #512-2,d7
- s1_loop_x:
- bsr vdisp
-
- move.w #512/2-1,d6
- s1_loop_y:
- move.l (a1),(a2)
- move.l (a3),(a4)
- lea.l 2048(a1),a1
- lea.l 2048(a2),a2
- lea.l 2048(a3),a3
- lea.l 2048(a4),a4
- dbra d6,s1_loop_y
-
- suba.l d4,a1
- suba.l d4,a2
- suba.l d5,a3
- suba.l d5,a4
-
- subq.w #2,d7
- bpl s1_loop_x
-
- bra main_rts
-
-
- **** ****
- s2: * 速度2の時
- lea.l 512*2+8(a1),a3 * a3.l = 転送元アドレス・その2
- lea.l 512*2+8(a2),a4 * a4.l = 転送先アドレス・その2
- lea.l (512-4)*2(a1),a1 * a1.l = 転送元アドレス・その1
- lea.l (512-4)*2(a2),a2 * a2.l = 転送先アドレス・その1
- move.l #1024*512+4*2,d4
- move.l #1024*512-4*2,d5
-
- move.w #512-4,d7
- s2_loop_x:
- bsr vdisp
-
- move.w #512/2-1,d6
- s2_loop_y:
- move.l (a1)+,(a2)+
- move.l (a1)+,(a2)+
- lea.l 2048-8(a1),a1
- lea.l 2048-8(a2),a2
- move.l -(a3),-(a4)
- move.l -(a3),-(a4)
- lea.l 2048+8(a3),a3
- lea.l 2048+8(a4),a4
- dbra d6,s2_loop_y
-
- suba.l d4,a1
- suba.l d4,a2
- suba.l d5,a3
- suba.l d5,a4
-
- subq.w #4,d7
- bpl s2_loop_x
-
- bra main_rts
-
-
- **** ****
- s3: * 速度3の時
- lea.l 512*2+16(a1),a3 * a3.l = 転送元アドレス・その2
- lea.l 512*2+16(a2),a4 * a4.l = 転送先アドレス・その2
- lea.l (512-8)*2(a1),a1 * a1.l = 転送元アドレス・その1
- lea.l (512-8)*2(a2),a2 * a2.l = 転送先アドレス・その1
- move.l #1024*512+8*2,d4
- move.l #1024*512-8*2,d5
-
- move.w #512,d7
- s3_loop_x:
- bsr vdisp
-
- move.w #512/2-1,d6
- s3_loop_y:
- move.l (a1)+,(a2)+
- move.l (a1)+,(a2)+
- move.l (a1)+,(a2)+
- move.l (a1)+,(a2)+
- lea.l 2048-16(a1),a1
- lea.l 2048-16(a2),a2
- move.l -(a3),-(a4)
- move.l -(a3),-(a4)
- move.l -(a3),-(a4)
- move.l -(a3),-(a4)
- lea.l 2048+16(a3),a3
- lea.l 2048+16(a4),a4
- dbra d6,s3_loop_y
-
- suba.l d4,a1
- suba.l d4,a2
- suba.l d5,a3
- suba.l d5,a4
-
- subq.w #8,d7
- bne s3_loop_x
-
- bra main_rts
-
-